﻿using System.Collections.Generic;
using System.Web.Mvc;
using Castle.Core.Logging;
using User.EF.Contracts;
using User.Global.Contracts.Message;

namespace User.Web.Contracts.Model.Admin
{
    public interface IMemberEditAdminModel
    {
        /// <summary>
        /// MemberTitle, bei Listen wird nur der Getter gesetzt, für den Value selbst gibt es noch ein extra Property
        /// </summary>
        IEnumerable<SelectListItem> MemberTitles { get; }

        /// <summary>
        /// Die Anrede die in der Oberfläche ausgewählt wird (der Value) wird in dieser variable abgelegt, d.h. wenn kein Wert ausgewählt wurde
        /// dann wird auch die hier angegebene Fehlermeldung auf der Oberfläche angezeigt. Wird auch benutzt um die currentselection der Dropdownliste anzuzeigen,
        /// da das Property Selected des SelectedListItem nicht funktioniert!
        /// ACHTUNG der Propertyname darf nicht Title sein, da sonst die Validierung nicht funktioniert!
        /// </summary>
        string MemberTitle { get; set; }

        /// <summary>
        /// der Vorname des Members
        /// </summary>
        string Firstname { get; set; }

        /// <summary>
        /// Der Nachname des Members
        /// </summary>
        string Lastname { get; set; }

        /// <summary>
        /// Der Loginname (E-Mail) des Members
        /// </summary>
        string Username { get; set; }

        /// <summary>
        /// Die ID des Members im System
        /// </summary>
        long Id { get; set; }

        /// <summary>
        /// Gibt an ob der Account noch aktiviert ist oder deaktiviert wurde.
        /// </summary>
        bool IsActiveAccount { get; set; }

        /// <summary>
        /// Die Telefonnumer des Members
        /// </summary>
        string Mobilenumber { get; set; }

        /// <summary>
        /// Der Aktuell verwendete Logger für die jeweilige Klasse
        /// </summary>
        ILogger Logger { get; set; }

        /// <summary>
        /// Hinzufügen einer Message zur Ausgabe.
        /// </summary>
        IAddMessage AddMessage { get; set; }

        /// <summary>
        /// Laden der passenden Modeldaten für den View.
        /// </summary>
        /// <returns>TRUE->Laden der Daten erfolgreich | FALSE->Fehler beim Laden der Daten</returns>
        bool Load(IWebQuerySummary webQuery, long userId);

        /// <summary>
        /// Setzten der Externen und internen Kommunikationsklasse für die passende Ausgabe.
        /// </summary>
        /// <param name="logger">Der Logger für das Filesystem</param>
        /// <param name="addMessage">die Messageanzeige.</param>
        void SetCommunication(ILogger logger, IAddMessage addMessage);
    }
}